🎖️GitЯра🎖️
Commit 14d0944f69299bec281037554b372209eb13bb61
Parents : e4b65a8
Author : James Rich <james.a.rich@gmail.com>
Date : 2026-05-13T14:36:37-05:00
feat: add online/offline status icon to Complete layout
Add OnlineStatusIcon (green checkmark/gray sleep) next to LastHeardInfo
in the Complete layout header, matching Compact's behavior. Icon only
shows for remote nodes (not thisNode, which already has ConnectionsNavIcon).
Regenerate affected Complete screenshots.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Changes
3 files changed, 16 insertions(+), 1 deletions(-)
Diff
diff --git a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeItem.kt b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeItem.kt
index 8b1cf56a2c..a82a53f60a 100644
--- a/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeItem.kt
+++ b/feature/node/src/commonMain/kotlin/org/meshtastic/feature/node/component/NodeItem.kt
@@ -93,8 +93,10 @@ import org.meshtastic.core.ui.component.TransportIcon
import org.meshtastic.core.ui.component.determineSignalQuality
import org.meshtastic.core.ui.icon.AirUtilization
import org.meshtastic.core.ui.icon.ChannelUtilization
+import org.meshtastic.core.ui.icon.DeviceSleep
import org.meshtastic.core.ui.icon.MeshtasticIcons
import org.meshtastic.core.ui.icon.Notes
+import org.meshtastic.core.ui.icon.Success
import org.meshtastic.proto.Config
private const val ACTIVE_ALPHA = 0.5f
@@ -471,7 +473,10 @@ private fun NodeItemHeader(
modifier = Modifier.size(16.dp),
)
}
- LastHeardInfo(lastHeard = thatNode.lastHeard, showLabel = false, contentColor = contentColor)
+ Row(verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp)) {
+ if (!isThisNode) OnlineStatusIcon(isOnline = thatNode.isOnline)
+ LastHeardInfo(lastHeard = thatNode.lastHeard, showLabel = false, contentColor = contentColor)
+ }
}
NodeStatusIcons(
@@ -498,3 +503,13 @@ private fun NodeItemFooter(thatNode: Node, contentColor: Color) {
NodeIdInfo(id = thatNode.user.id.ifEmpty { "???" }, contentColor = contentColor)
}
}
+
+@Composable
+private fun OnlineStatusIcon(isOnline: Boolean, modifier: Modifier = Modifier) {
+ Icon(
+ imageVector = if (isOnline) MeshtasticIcons.Success else MeshtasticIcons.DeviceSleep,
+ contentDescription = null,
+ modifier = modifier.size(16.dp),
+ tint = if (isOnline) MaterialTheme.colorScheme.tertiary else MaterialTheme.colorScheme.outline,
+ )
+}
diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Dark_d19fbf1f_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Dark_d19fbf1f_0.png
index 3036bbf879..514ccb3531 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Dark_d19fbf1f_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Dark_d19fbf1f_0.png differ
diff --git a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Light_b29dc7a7_0.png b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Light_b29dc7a7_0.png
index efb71d390f..ddf6bc0839 100644
Binary files a/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Light_b29dc7a7_0.png and b/screenshot-tests/src/screenshotTestDebug/reference/org/meshtastic/screenshots/feature/NodeScreenshotTestsKt/ScreenshotNodeItemComplete_Light_b29dc7a7_0.png differ
Served by rngit 1.5.2 - Generated in 0.09s